<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <script>
      // 1. 构造函数对象
      function User(name){
        this.name = name
      }
      // 2. 原型对象
      // 原型对象上的属性和方法是实例对象所共享的
      // 可以动态的天机属性和方法
      // 原型对象的属性 constructor 指向 构造函数对象
      // 构造函数对象属性 prototype 指向 原型对象
      // 实例对象属性 __proto__ 指向原型对象
      var prototype = User.prototype
      prototype.wlak = function(){
        console.log("走路");
      }
      // 3. 实例对象
      var zs =  new User("张三")

      // 原型链：
      // 构造函数 + 原型对象 + 实例对象 之间的关系
      // 属性和方法优先从 本身去查找，如果找不到去 原型对象上找
      // 如果原型对象上也找不到，一般情况下 去 Object 找，如果也找不到，返回 undefined
      zs.wlak()
      console.log(User.prototype === prototype);
      console.log(prototype.constructor === User);
      console.log(zs.__proto__ === prototype);
      console.log(Object.prototype === prototype.__proto__);
    </script>
</body>
</html>